package com.airlines.crewassignment.domain.util;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import com.airlines.crewassignment.domain.Crew;
import com.airlines.crewassignment.domain.CrewPositionAssignment;
import com.airlines.crewassignment.domain.FlightInfo;
import com.airlines.crewassignment.domain.LinkLine;
import com.airlines.crewassignment.domain.Position;

/**
 * @author xxxx
 * @date 2018年4月17日 
 * @description
 */
public class CrewPositionAssignmentUtil {
	
	public static boolean isNotEmpty(List<CrewPositionAssignment> list){
		if(list != null && list.size()>=1){
			return true;
		}else{
			return false;
		}
	}
	
	/**
	 * 从解决方案变量中，获取所有的连线,去重
	 * @param list
	 * @return
	 */
	public static Set<LinkLine>  getLinkLineSet(List<CrewPositionAssignment> list){
		Set<LinkLine> linkLineSet = new HashSet<>();
		for(CrewPositionAssignment cpa : list){
			LinkLine linkLine  = cpa.getPosition().getLinkLine();
			linkLineSet.add(linkLine);
		}
		return linkLineSet;
	}
	
	public static  Set<Position>  getPositionSet(List<CrewPositionAssignment> list){
		Set<Position> posttionSet = new HashSet<>();
		Set<LinkLine> linkLineSet = getLinkLineSet(list);
		for(LinkLine l: linkLineSet) {
			posttionSet.addAll(l.getPositionList());
		}
		return posttionSet;
	}
	
	
	/**
	 * 从解决方案变量中，获取所有的航班
	 * @param list
	 * @return
	 */
	public static Set<FlightInfo> getFlightInfoSet(List<CrewPositionAssignment> list){
		Set<FlightInfo> flightInfoSet = new HashSet<>();
		
		Set<LinkLine> linkLineSet = getLinkLineSet(list);
		for(LinkLine l: linkLineSet) {
			flightInfoSet.addAll(l.getFlightInfoList());
		}
		return flightInfoSet;
	}
	
	/**
	 * 从解决方案中，获取所有已经排班的机组人员
	 * @param list
	 * @return
	 */
	public static Set<Crew> getCrewSet(List<CrewPositionAssignment> list){
		Set<Crew> crewSet = new HashSet<>();	
		for(CrewPositionAssignment cpa : list){
			Crew crew = cpa.getCrew();
			if(crew !=null){
				crewSet.add(crew);
			}
		}
		return crewSet;
	}
	
}
